package main

import "fmt"

func main() {
	/*
		基本用法
	*/
	a := 2
	switch a {
	case 1:
		fmt.Println("变量值为1")
	case 2:
		fmt.Println("变量值为2")
	case 3, 4, 5: //多条匹配
		fmt.Println("变量值为3,4,5中的一个")
	default:
		fmt.Println("over")
	}

	/*
		Type Switch
		switch 语法还可以被用于 type-switch 来判断某个interface 变量 中世纪存储的变量类型。
		Type Switch语法如下：
	*/
	var x interface{}

	switch i := x.(type) { // 带初始化语句
	case nil:
		fmt.Printf("x 的类型 :%T\r\n", i)
	case int:
		fmt.Printf("x 是 int 型")
	case float64:
		fmt.Printf("x 是 float64 型")
	case func(int) float64:
		fmt.Printf("x 是 func(int) 型")
	case bool, string:
		fmt.Printf("x 是 bool 或 string 型")
	default:
		fmt.Printf("未知型")
	}

	/**
	fallthrough:
	 使用fallthrough 会强制执行后面一句case 语句下的程序体：不会判断下一条case 的表达式结果是否为true,而是直接执行。
	*/
	switch a {
	case 1:
		fmt.Println("变量值为1")
	case 2:
		fmt.Println("变量值为2")
		fallthrough //下一行的case里面的内容不需要进行判断会直接执行里面的代码。
	case 3, 4, 5: //多条匹配
		fmt.Println("变量值为3,4,5中的一个")
	default:
		fmt.Println("over")
	}

}
